﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entidades;
using LogicaNegocio;
namespace PresentacionEscritorio
{
    public partial class frmAgregarEspecialidadAMedico : Form, IFormsPadre_Hijo
    {
        //     public Puente Caller { private get; set; }
        List<Especialidad> listaEspecialidades = new List<Especialidad>();
        GestorEspecialidadXMedico GEM;
        GestorEspecialdiad GE = new GestorEspecialdiad();
        Especialidad oE = null;


        //extras
        private List<EspecialidadMedico> ListEspMedNuevasYViejas = null;
        public long LegajoMed { get; set; }
        private EspecialidadMedico EspAgregada;
        frmRegistrarEspecialidadPorMedico myformPadre;
        
        public frmAgregarEspecialidadAMedico()
        {
            InitializeComponent();
        }

        private void frmAgregarEspecialidadAMedico_Load(object sender, EventArgs e)
        {
            //cargarCombo();
            obtenerListadoEspecialidadesMed(LegajoMed);
            cargarComboEspecialidades();
            myformPadre.setFormHijo(this);
        }

        //private void cargarCombo()
        //{
        //    IFormsEspecialidadXMedico_AgregarEspecAMedico parent = this.Owner as IFormsEspecialidadXMedico_AgregarEspecAMedico;
        //    listaEspecialidades = parent.filtrarGrillaEspecialidadSeleccionada();
        //    Especialidad a = new Especialidad();
        //    Especialidad b = new Especialidad();
        //    List<Especialidad> lstCombo = GE.ObtenerTodos();

        //    for (int i = 0; i < lstCombo.Count; i++)
        //    {
        //        for (int j = 0; j < listaEspecialidades.Count; j++)
        //        {
        //            a = lstCombo.ElementAt(i);
        //            b = listaEspecialidades.ElementAt(j);
        //            if (a.CodEspecialidad == b.CodEspecialidad)
        //            {
        //                lstCombo.RemoveAt(i);
        //            }

        //        }
        //    }
        //    cmbEspecialidades.DataSource = lstCombo;
        //    cmbEspecialidades.DisplayMember = "Nombre";
        //    cmbEspecialidades.ValueMember = "Codigo";
        //}

        private void obtenerListadoEspecialidadesMed(long legajo)
        {
            GestorMedicos gm = new GestorMedicos();
            ListEspMedNuevasYViejas = gm.ObtenerTodasEspecialidadesMedico(legajo);
        }

        private void cargarComboEspecialidades()
        {
            List<Especialidad> listCombo = GestorEspecialidades.obtenerTodasEspecialidades();
            List<Especialidad> listComboDefinitiva = new List<Especialidad>();
            
            // si tienen especialidades comparo, sino no
            if (ListEspMedNuevasYViejas.Count > 0)
            {
                foreach (Especialidad item in listCombo)
                {
                    foreach (EspecialidadMedico item2 in ListEspMedNuevasYViejas)
                    {
                        //si no son las mismas que ya tiene el medico las agregamos a la lista que va al combo
                        if (item.CodEspecialidad != item2.CodEspecialidad)
                        {
                            listComboDefinitiva.Add(item);
                        }
                        //y si son iguales, pero fueron dadas de baja, tambien las agregamos a la lista del combo
                        else if (item.CodEspecialidad == item2.CodEspecialidad && item2.FechaBaja != null)
                            listComboDefinitiva.Add(item);
                    }
                }
            }
            else
                listComboDefinitiva = listCombo;
            
            cmbEspecialidades.DataSource = listComboDefinitiva;
            cmbEspecialidades.DisplayMember = "Nombre";
            cmbEspecialidades.ValueMember = "CodEspecialidad";
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            agregarEspecialidad();
        }

        private void agregarEspecialidad()
        {
            if (!string.IsNullOrEmpty(mskTxtNumeroMatricula.Text))
            {
                long nroMatriculaEsp = long.Parse(mskTxtNumeroMatricula.Text);
                int codEspSeleccionada = int.Parse(cmbEspecialidades.SelectedValue.ToString());
                DateTime fechaAlta = DateTime.Now;

                GestorMedicos gm = new GestorMedicos();
                bool res = gm.registrarEspecialidadAMedico(LegajoMed, nroMatriculaEsp, codEspSeleccionada, fechaAlta);

                if (res)
                {
                    EspAgregada = new EspecialidadMedico();
                    EspAgregada.CodEspecialidad = codEspSeleccionada;
                    EspAgregada.FechaAlta = fechaAlta;
                    EspAgregada.LegajoMedico = LegajoMed;
                    EspAgregada.NumeroMatriculaEspecialidad = nroMatriculaEsp;
                    EspAgregada.TieneHorario = false;
                    //tendria que llamar a que se actualice la grilla
                    myformPadre.actualizarCambios();
                    this.Dispose();
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public void filtrarEspecialidadesEnCombo()
        {
            throw new NotImplementedException();
        }

        public void setFormPadre(Form formPadre)
        {
            this.myformPadre = (frmRegistrarEspecialidadPorMedico)formPadre;
        }

        public void setFormHijo(Form formHijo)
        {
            throw new NotImplementedException();
        }
    }
}
